home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Leser 15 / Amiga Plus Leser CD 15.iso / Tools / Development / PluginSRC_EvenMore / wordwrap.e < prev    next >
Encoding:
Text File  |  2002-03-13  |  2.4 KB  |  122 lines

  1. /*
  2.    MSWord2Text
  3.    EvenMore FileIO plugin
  4.    Author: Chris Perver
  5.    Copyright (c) 2001
  6. */
  7.  
  8.  
  9. OPT REG=5
  10.  
  11. LIBRARY 'wordwrap.plugin',1,1,'Wordwrap 1.00' IS em_main, em_end, em_info, em_pluginid, em_begin, em_format
  12.  
  13. MODULE 'tools/ctype', '*epo'
  14.  
  15. DEF mem2:PTR TO CHAR->, mswvers
  16.  
  17.  
  18. PROC em_isdatatype(memadr, lenadr)
  19.   DEF c = 0, linewidth = 0, newlines = 0
  20.  
  21.   -> FIND IF WE ACTUALLY NEED TO WORDWRAP THIS FILE
  22.  
  23.   WHILE (c < lenadr)
  24.     SELECT 256 OF memadr[c]
  25.       CASE "\n"
  26.         linewidth := 0
  27.       CASE "\b"
  28.         IF memadr[c+1] = "\n" THEN INC c
  29.         linewidth := 0
  30.       DEFAULT
  31.         INC linewidth
  32.         IF (linewidth > 80)
  33.           INC newlines
  34.           linewidth := 0
  35.         ENDIF
  36.     ENDSELECT
  37.     INC c
  38.   ENDWHILE
  39. ENDPROC newlines
  40.  
  41. PROC em_parsedata(epo:PTR TO em_pluginobj)
  42.   DEF memadr:PTR TO CHAR, lenadr
  43.   DEF count = 0, count2 = 0
  44.   DEF currchar = 0
  45.   DEF notdone = TRUE
  46.   DEF wordwrap = 80, oldpos, oldcc
  47.  
  48.   memadr := epo.buffer
  49.   lenadr := epo.length
  50.   mem2   := epo.nbuffer
  51.  
  52.   notdone := TRUE
  53.  
  54.   WHILE notdone AND (count < lenadr)
  55.  
  56.     SELECT 256 OF memadr[count]
  57.       CASE "\b", "\n"
  58.         mem2[count2++] := memadr[count]
  59.         currchar := 0
  60.       DEFAULT
  61.         mem2[count2++] := memadr[count]
  62.         INC currchar
  63.  
  64.         IF currchar >= wordwrap
  65.           -> Find last space
  66.           IF isspace(mem2[count2]) = TRUE
  67.             mem2[count2++] := "\n"
  68.             currchar := 0
  69.           ELSE
  70.             oldpos := count2
  71.             oldcc  := currchar
  72.             WHILE isspace(mem2[count2]) = FALSE
  73.               mem2[count2 + 1] := mem2[count2]
  74.               DEC count2
  75.               DEC currchar
  76.             ENDWHILE
  77.  
  78.             INC count2
  79.             mem2[count2] := "\n"
  80.             currchar := oldcc - currchar
  81.  
  82.            count2 := oldpos + 1
  83.          ENDIF
  84.        ENDIF
  85.     ENDSELECT
  86.     INC count
  87.   ENDWHILE
  88.  
  89.   mem2[count2]   := "\n"
  90. ENDPROC mem2, count2
  91. -><
  92.  
  93. -> *** STANDARD PROCS FOR PLUGINS
  94.  
  95.  
  96. PROC em_main(epo:PTR TO em_pluginobj)
  97.     DEF len2
  98.     mem2, len2 := em_parsedata(epo)
  99.     epo.nlength := len2
  100.     RETURN TRUE
  101. ENDPROC
  102.  
  103. PROC em_begin(epo:PTR TO em_pluginobj)
  104.   DEF extralines
  105.   extralines := em_isdatatype(epo.buffer, epo.length)
  106.   IF extralines > 0
  107.     RETURN "MEM", (epo.length * 2)
  108.   ELSE
  109.     RETURN FALSE
  110.   ENDIF
  111. ENDPROC
  112.  
  113. PROC em_end()      IS EMPTY
  114.  
  115. PROC em_info()     IS 'Wordwrap 1.00'
  116.  
  117. PROC em_pluginid() IS "FRMT"
  118.  
  119. PROC em_format()   IS 'Wordwrap'
  120.  
  121. PROC main()        IS EMPTY
  122.